Magnetic storage systems such as disk drives include a magnetic medium or platter with a magnetic coating that is divided into data tracks. The data tracks are divided into data sectors that store fixed-sized data blocks. A read/write head typically includes a write circuit and write element such as an inductor that selectively generate positive and negative magnetic fields that are stored by the magnetic medium. The stored positive and negative fields represent binary ones and zeros. The read/write head includes an element such as a magneto-resistive element that senses the stored magnetic field to read data from the magnetic medium. A spindle motor rotates the platter and an actuator arm positions the read/write head relative to the magnetic medium.
Magnetic storage systems typically code the user data using Run Length Limited (RLL) code. RLL coding reduces sequences in the user data that may cause problems with timing circuits of the magnetic storage system. For example, a RLL code enforces constraints on the number of consecutive ones and/or zeros that are allowed to occur in the data. The efficiency of the RLL code is typically measured in terms of a code rate. For every m-bits or m-bytes of user data, an n-bit or n-byte encoded word is written to the storage media. RLL codes are used to eliminate bad patterns in the original data and typically do not have error correction capability.
Referring now to FIG. 1, a write path 10 in a conventional data storage system includes an error correction coding (ECC) encoder (ENC) 12 that receives user data. The ECC ENC 12 generates cyclic redundancy check (CRC) and/or ECC bits that are appended to the user data. The user data, CRC bits and/or ECC bits are output by the ECC ENC 12 to an input of an XOR gate 14. Another input of the XOR gate 14 receives an output of a data scrambler 16, which generates a pseudo-random binary sequence.
A scrambled output of the XOR gate 14 is input to a run length limited (RLL) ENC 18. The RLL ENC 18 encodes bit stings to prevent the unwanted bit patterns that violate the constraint and outputs a bit stream to a read channel (R/C). The RLL ENC 18 typically converts a block of NRLL bits into (NRLL+1) bits to avoid the unwanted data patterns.
In FIG. 2, a read path 20 of a data storage system is shown. The read path 20 includes a RLL decoder (DEC) 22 that receives the bit stream from the read channel and decodes the bit stream. An output of the RLL DEC 22 is input to an XOR gate 24. A scrambler 26, which is the same as the scrambler 16, generates the pseudo-random binary sequence, which is input to another input of the XOR gate 24. An output of the XOR gate 24 is input to an ECC DEC 26, which performs ECC decoding and outputs the user data. The RLL ENC 18 eliminates unwanted data patterns. However, the RLL ENC 18 also reduces data storage capacity. In other words, RLL coding increases channel bit density (CBD), which reduces SNR and leads to lower reliability.